//
// Created by user on 20-5-5.
//

#ifndef _SCHEDULE_H_
#define _SCHEDULE_H_

#include "../GeneralLibrary/Lib.h"

#include "Task.h"
#include "KernelTimer/Timer.h"
#include "SMP.h"

/**************************** 结构体重命名区 ***************************/

typedef struct scheduleStruct Schedule;

/**************************** 结构体定义区 ***************************/

// 就绪队列结构体
struct scheduleStruct {
    long runningTaskCount;      // 当前队列内的进程数量
    long CPUExecTaskJiffies;    // 进程可以执行的时间片数量
    Task taskQueueHead;         // 就绪队列队列头
};

/**************************** 外部变量声明区 ***************************/
// 就绪队列
extern Schedule taskSchedule[NR_CPUS];

/**************************** 函数声明区 ***************************/
/**
 * 初始化就绪队列
 */
void scheduleInit();

/**
 * 调度器
 */
void schedule();

/**
 * 获取下一个进程
 * @return 进程结构体
 */
Task *getNextTask();

/**
 * 向就绪队列插入进程
 * @param tsk 进程结构体
 */
void insertTaskQueue(Task *tsk);

#endif //_SCHEDULE_H_
